# -*- coding: utf-8 -*-
# vim: set sw=4 ts=4 si et:

from django.core.management.base import NoArgsCommand
from django.contrib.auth.models import User
from si_4k.sistema.models import *
from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType


#import win32com.client
from datetime import *

class Command(NoArgsCommand):
    help = """Cria Groupos"""

    requires_model_validation = 0

    def handle_noargs(self, **options):
        
        date1i= datetime(2011, 2, 14, 12, 00)
        date1f= datetime(2011, 2, 14, 17, 30)
        date2i= datetime(2011, 5, 17, 12, 30)
        date2f= datetime(2011, 5, 17, 15, 30)
        date3i= datetime(2011, 3, 20, 12, 30)
        date3f= datetime(2011, 3, 20, 15, 30)
        date4i= datetime(2011, 3, 19, 12, 30)
        date4f= datetime(2011, 3, 19, 15, 30)
        
        
        def cria_usuario(username, email, password):
            user = User.objects.create_user(username, email, password)
            return user
        
        usuario1 = cria_usuario('professor', 'priscilla.tenguan@gmail.com', 'professor')
        usuario2 = cria_usuario('secretaria', 'michele@gmail.com', 'secretaria')
        usuario3 = cria_usuario('coordenador', 'gabriela@gmail.com', 'coordenador')
        usuario4 = cria_usuario('administrador', 'thiago@gmail.com', 'administrador')
        usuario5 = cria_usuario('fernando', 'fernando@mail.com', 'fernando')
        usuario6 = cria_usuario('marcos','marcos@gmail.com', 'marcos')
        usuario7 = cria_usuario('marcio', 'marciohariki@gmail.com', 'marcio')
        
        def cria_unidade(nome):
            unidade = Unidade(nome=nome)
            unidade.save()
            return unidade
        
        unidade1 = cria_unidade('Unidade I')
        unidade2 = cria_unidade('Unidade II')
        unidade3 = cria_unidade('Unidade III')
        unidade4 = cria_unidade('Unidade IV')
        unidade5 = cria_unidade('Unidade V')
        
        def cria_detalhe_usuario(user, nome, email, email2,cargo, endereco, telefone, celular, rg, cpf, formacao, carteira_trabalho, pis, nome_pai, nome_mae, naturalidade, data_nascimento, foto):
            detalhe = DetalheUsuario(user = user, email=email, email2=email2, nome = nome, cargo=cargo, endereco = endereco, telefone = telefone, celular = celular, rg = rg, cpf = cpf, formacao = formacao, carteira_trabalho = carteira_trabalho, pis = pis, nome_pai = nome_pai, nome_mae = nome_mae, naturalidade = naturalidade, data_nascimento = data_nascimento, foto = foto)
            detalhe.save()
            return detalhe
        
        detalhe1 = cria_detalhe_usuario(usuario1, 'Mayumi', 'mayumi@gmail.com', 'mayumi@gmail.com', 'Professor', 'Rua Antonio Pais, vila 75, casa 25', '7272-3060', '7272-3060', '46.705.983-4', '383.747.188-89', 'Engenharia Civil', '123456789', '1234567890', 'Edson', 'Neide', 'brasileira', '1990-03-19', 'avatar.jpg')
        detalhe2 = cria_detalhe_usuario(usuario2, 'Michele', 'michele@gmail.com', 'michele@gmail.com', 'Secretaria', 'Rua do João, casa 1', '1234-5678', '7272-3060', '46.705.983-4', '383.747.188-89', 'Engenharia Civil', '123456789', '1234567890', 'Edson', 'Neide', 'brasileira', '1990-03-19', 'avatar.jpg')
        detalhe3 = cria_detalhe_usuario(usuario3, 'Gabriela', 'gabriela@gmail.com', 'gabriela@gmail.com','Coordenador', 'Rua do João, casa 2', '1234-5678', '7272-3060', '46.705.983-4', '383.747.188-89', 'Engenharia Civil', '123456789', '1234567890', 'Edson', 'Neide', 'brasileira', '1990-03-19', 'avatar.jpg')
        detalhe4 = cria_detalhe_usuario(usuario4, 'Thiago', 'thiago@gmail.com','thiago@gmail.com','Administrador', 'Rua do João, casa 3', '1234-5678', '7272-3060', '46.705.983-4', '383.747.188-89', 'Engenharia Civil', '123456789', '1234567890', 'Edson', 'Neide', 'brasileira', '1990-03-19', 'avatar.jpg')
        detalhe5 = cria_detalhe_usuario(usuario5, 'Fernando','fernando@gmail.com', 'fernando@gmail.com','Mantenedor', 'Rua do João, casa 4', '1234-5678', '7272-3060','46.705.983-4', '383.747.188-89', 'Engenharia Civil', '123456789', '1234567890', 'Edson', 'Neide', 'brasileiro', '1990-03-19', 'avatar.jpg')
        detalhe6 = cria_detalhe_usuario(usuario6, 'Marcos','marcos@gmail.com', 'marcos@gmail.com','Mantenedor', 'Rua do João, casa 4', '1234-5678', '7272-3060','46.705.983-4', '383.747.188-89', 'Engenharia Civil', '123456789', '1234567890', 'Edson', 'Neide', 'brasileira', '1990-03-19', 'avatar.jpg')
        detalhe7 = cria_detalhe_usuario(usuario7, 'Hariki','hariki@hariki.com', 'hariki@hariki.com','Mantenedor', 'Rua do João, casa 4', '1234-5678', '7272-3060','46.705.983-4', '383.747.188-89', 'Engenharia Civil', '123456789', '1234567890', 'Edson', 'Neide', 'brasileira', '1990-03-19', 'avatar.jpg')
        
        def adiciona_unidade(detalhe, unidade):
            detalhe.unidade.add(unidade)
            detalhe.save()
        
        adiciona_unidade(detalhe1, unidade1)
        adiciona_unidade(detalhe2, unidade1)
        adiciona_unidade(detalhe3, unidade1)
        adiciona_unidade(detalhe4, unidade1)
        adiciona_unidade(detalhe5, unidade1)
        adiciona_unidade(detalhe6, unidade1)
        adiciona_unidade(detalhe7, unidade2)
        adiciona_unidade(detalhe5, unidade2)
        
            
        def cria_dados_financeiros(detalheusuario, banco, agencia, conta_bancaria):
            dados_financeiros = DadosFinanceiros(detalheusuario=detalheusuario, banco=banco, agencia=agencia, conta_bancaria=conta_bancaria)
            dados_financeiros.save()
            
        dados_financeiros1 = cria_dados_financeiros(detalhe1, 'itau', '1259', '00104885')
        dados_financeiros2 = cria_dados_financeiros(detalhe2, 'itau', '1259', '00104885')
        dados_financeiros3 = cria_dados_financeiros(detalhe3, 'itau', '1259', '00104885')
        dados_financeiros4 = cria_dados_financeiros(detalhe4, 'itau', '1259', '00104885')
        dados_financeiros5 = cria_dados_financeiros(detalhe5, 'itau', '1259', '00104885')
        dados_financeiros6 = cria_dados_financeiros(detalhe6, 'itau', '1259', '00104885')
        dados_financeiros7 = cria_dados_financeiros(detalhe7, 'itau', '1259', '00104885')

        def cria_professor(detalheusuario, valor, ultimo_recibo):
            professor = Professor(detalheusuario = detalheusuario, valor = valor, ultimo_recibo= ultimo_recibo)
            professor.save()
            return professor
        
        professor1 = cria_professor(detalhe1, '25.00', '04/05/2010')

        
        def cria_relatorio_professor(professor, valor, data):
            relatorio_professor = RelatorioProfessor (professor = professor, valor = valor, data = data)
            relatorio_professor.save()
            return relatorio_professor
        
        relatorio_professor_1 = cria_relatorio_professor(professor1, '25.00', '1990-09-19')
        
        
        def cria_preco_aula(aula_sozinho, aula_sozinho_casa, aula_grupo, aula_grupo_casa, aula_sozinho_novo, aula_sozinho_casa_novo, aula_grupo_novo, aula_grupo_casa_novo, data_limite, data_vigencia, unidade):
           preco_aula = PrecoAula(aula_sozinho=aula_sozinho, aula_sozinho_casa=aula_sozinho_casa, aula_grupo=aula_grupo, aula_grupo_casa=aula_grupo_casa, aula_sozinho_novo=aula_sozinho_novo, aula_sozinho_casa_novo=aula_sozinho_casa_novo, aula_grupo_novo=aula_grupo_novo, aula_grupo_casa_novo=aula_grupo_casa_novo,data_limite=data_limite, data_vigencia=data_vigencia, unidade=unidade)
           preco_aula.save()
           return preco_aula
        
        preco_aula1 = cria_preco_aula('75.00','50.00','80.00','55.00', '75.00','50.00','80.00','55.00','2011-05-19','2011-03-20', unidade1)
        preco_aula2 = cria_preco_aula('75.00','50.00','80.00','55.00', '75.00','50.00','80.00','55.00','2011-05-19','2011-03-20', unidade2)
        preco_aula3 = cria_preco_aula('75.00','50.00','80.00','55.00', '75.00','50.00','80.00','55.00','2011-05-19','2011-03-20', unidade3)
        preco_aula4 = cria_preco_aula('75.00','50.00','80.00','55.00', '75.00','50.00','80.00','55.00','2011-05-19','2011-03-20', unidade4)
        preco_aula5 = cria_preco_aula('75.00','50.00','80.00','55.00', '75.00','50.00','80.00','55.00','2011-05-19','2011-03-20', unidade5)
         
        def cria_aluno(nome, colegio, serie, celular, responsavel, endereco, telefone_pais, telefone_casa, email_1, email_2, cpf_responsavel, data_nascimento, cidade, data_ingresso, preco_aula, ultimo_relatorio, estado):
            aluno = Aluno (nome =nome, colegio = colegio, serie = serie, celular = celular, responsavel = responsavel, endereco = endereco, telefone_pais = telefone_pais, telefone_casa = telefone_casa, email_1 = email_1, email_2 = email_2, cpf_responsavel = cpf_responsavel, data_nascimento = data_nascimento, cidade = cidade, data_ingresso=data_ingresso, preco_aula=preco_aula, ultimo_relatorio=ultimo_relatorio, estado = estado) 
            aluno.save()
            return aluno
        
        aluno1 = cria_aluno('Jhonston Robson Dalcin','Dante', '1°', '8956-1456', 'Fernando', 'Rua Joao', '3256-1245', '1155-1222', 'ton@gmail.com', 'ton@uol.com.br', '213.123.123-89', '1990-04-19', 'São Paulo', date1i, preco_aula1, 'Nenhum Relatório Emitido', 'São Paulo')
        aluno2 = cria_aluno('Jennifer Bistafa Liu', 'Etapa', '3°', '1234-5689', 'Marcelo', 'Rua Vergueiro', '1234-5789', '1245-7888', 'jennifer@gmail.com', 'jennifer@uol.com.br', '123.123.123-89', '1990-09-19', 'São Paulo', date2i, preco_aula1, 'Nenhum Relatório Emitido', 'São Paulo')
        aluno3 = cria_aluno('Jessica Cristina dos Santos', 'Band', '2°', '1234-5689', 'Marcelo', 'Rua Vergueiro', '1234-5789', '1245-7888', 'jennifer@gmail.com', 'jessica@uol.com.br', '123.123.123-89', '1990-09-19', 'São Paulo', date1i, preco_aula1, 'Nenhum Relatório Emitido', 'São Paulo')
        
        def adiciona_unidade_aluno(aluno, unidade):
            aluno.unidade.add(unidade)
            aluno.save()
        
        adiciona_unidade_aluno(aluno1,unidade1)
        adiciona_unidade_aluno(aluno2,unidade1)
        adiciona_unidade_aluno(aluno3,unidade2)
        
        def cria_relatorio_aluno(aluno):
            relatorio = RelatorioAluno(aluno=aluno)
            relatorio.save()
            return relatorio
        
        cria_relatorio_aluno(aluno1)
        cria_relatorio_aluno(aluno2)
        cria_relatorio_aluno(aluno3)
           
        def cria_local(nome, unidade):
            local = Local(nome=nome, unidade=unidade)
            local.save()
            return local
            
        local1 = cria_local('Sala 1', unidade1)
        local2 = cria_local('Sala 2', unidade1)    
        local3 = cria_local('Sala 3', unidade1)    
        local4 = cria_local('Sala 4', unidade1)    
        local5 = cria_local('Sala 5', unidade1)    
        local6 = cria_local('Sala 6', unidade1)
        local7 = cria_local('Casa do Aluno', None)
        local8 = cria_local('Sala A', unidade2)
        local9 = cria_local('Sala B', unidade2)
        
        def cria_aula(professor, local, aluno, aluno2, inicio, fim, tipo, valido, valor):
            aula = Aula (professor = professor, local = local, inicio = inicio, fim = fim, tipo = tipo, valido=valido, valor=valor)
            aula.save()
            aula.aluno.add(aluno)
            aula.aluno.add(aluno2)
            aula.save()
            return aula
        
        aula1 = cria_aula(professor1, local7, aluno1, aluno2, date1i, date1f, 'Química', True,'55.00')
        aula2 = cria_aula(professor1, local1, aluno1, aluno3, date2i, date2f, 'Física', True,'55.00')
        aula3 = cria_aula(professor1, local2, aluno2, aluno3, date3i, date3f, 'Matemática', True,'55.00')
        aula4 = cria_aula(professor1, local3, aluno2, aluno3, date4i, date4f, 'Portugues', True, '55.00')
        
        def cria_status_aula(aula, aluno, pago):
            status_aula = StatusAula(aula=aula, aluno=aluno, pago=pago)
            status_aula.save()
            return status_aula
        
        status_aula1 = cria_status_aula(aula1, aluno1, False)
        status_aula2 = cria_status_aula(aula1, aluno2, False)
        status_aula3 = cria_status_aula(aula2, aluno1, False)
        status_aula4 = cria_status_aula(aula2, aluno3, False)
        status_aula5 = cria_status_aula(aula3, aluno2, False)
        status_aula6 = cria_status_aula(aula3, aluno3, False)
        status_aula7 = cria_status_aula(aula4, aluno2, False)
        status_aula8 = cria_status_aula(aula4, aluno3, False)
        
        def cria_relatorio_aula(aula, descricao):
            relatorio_aula = RelatorioAula (aula = aula, descricao = descricao)
            relatorio_aula.save()
            return relatorio_aula
        
       
        def cria_pagamento(aluno, valor, data, desconto):
            pagamento = Pagamento (aluno = aluno, valor = valor, data = data, desconto=desconto)
            pagamento.save()
            return pagamento
        
        pagamento1 = cria_pagamento(aluno1, '10', '2011-03-19', '1000')
        pagamento2 = cria_pagamento(aluno2, '90.00', '2011-02-18', '10')
        pagamento3 = cria_pagamento(aluno1, '70.00', '2011-02-10', '20')
        pagamento4 = cria_pagamento(aluno2, '3.00', '2011-03-15', '30')
        pagamento5 = cria_pagamento(aluno1, '11.00', '2011-01-15', '40')
        pagamento6 = cria_pagamento(aluno2, '12.00', '2011-02-15', '50')
        
        def cria_boleto(pagamento):
            boleto = Boleto (pagamento = pagamento)
            boleto.save()
            return boleto
        
        boleto1 = cria_boleto(pagamento1)
        
        def cria_divida(aluno, valor):
            divida = Divida (aluno = aluno, valor = valor)
            divida.save()
            return divida
        
        divida1 = cria_divida(aluno1, '150')
        divida2 = cria_divida(aluno2, '70.25')
        divida3 = cria_divida(aluno3, '0')
        def cria_gastos(descricao, valor, data):
            gastos = Gastos (descricao = descricao, valor = valor, data = data)
            gastos.save()
            return gastos
        
        gastos1 = cria_gastos('Pagamento do Professor', '50.00', '2011-01-19')
        gastos2 = cria_gastos('Aluguel', '200.00', '2010-01-19')
        gastos3 = cria_gastos('Giz', '20.00', '2009-01-19')
        gastos34 = cria_gastos('Pastas', '10.00', '2011-01-19')
        
        
        def cria_inventario(objeto, quantidade_total, valor_total):
            inventario = Inventario (objeto = objeto, quantidade_total = quantidade_total, valor_total = valor_total)
            inventario.save()
            return inventario
        
        inventario1 = cria_inventario('Cadeira', 16, '25.00')
        inventario2 = cria_inventario('Mesa', 15, '13.00')
        
        def cria_estoque(inventario, quantidade, valor, local_compra, data_compra, unidade):
            estoque = Estoque (inventario = inventario, quantidade = quantidade, valor = valor, local_compra = local_compra, data_compra = data_compra, unidade=unidade)
            estoque.save()
            return estoque
        
        estoque1 = cria_estoque(inventario1, 16, '25.00', 'Etna', '2011-01-19', unidade1)
        estoque2 = cria_estoque(inventario2, 15, '13.00', 'Etna', '2011-01-19', unidade2)
        
        def cria_referencia(professor, tipo, abrangencia):
            referencia = Referencias(professor=professor, tipo=tipo, abrangencia=abrangencia)
            referencia.save()
        
        referencia1 = cria_referencia(professor1, 'Matemática', 'Parcial')
        referencia2 = cria_referencia(professor1, 'Física', 'Completa')
        
        
       #Definição dos grupos de permissão
        professor = Group(name='Professor')
        professor.save()
        secretaria = Group(name='Secretaria')
        secretaria.save()
        coordenador = Group(name='Coordenador')
        coordenador.save()
        administrador = Group(name='Administrador')
        administrador.save()
        mantenedor = Group(name='Mantenedor')
        mantenedor.save()
    
            
        #Permissão 1: Acesso à página Cadastro
        conteudo_cadastro = ContentType.objects.get(app_label='sistema', model='aluno')
        perm_cadastro = Permission(name='Can View', codename='perm_cadastro', content_type=conteudo_cadastro)
        perm_cadastro.save()
        secretaria.permissions.add(perm_cadastro)
        coordenador.permissions.add(perm_cadastro)
        administrador.permissions.add(perm_cadastro)
        mantenedor.permissions.add(perm_cadastro)
        
        #Permissão 2: Acesso ao cadastro de alunos
        conteudo_cadastro_aluno = ContentType.objects.get(app_label='sistema', model='aluno')
        perm_cadastro_aluno = Permission(name='Can View', codename='perm_cadastro_aluno', content_type=conteudo_cadastro_aluno)
        perm_cadastro_aluno.save()
        secretaria.permissions.add(perm_cadastro_aluno)
        coordenador.permissions.add(perm_cadastro_aluno)
        administrador.permissions.add(perm_cadastro_aluno)
        mantenedor.permissions.add(perm_cadastro_aluno)
        
        #Permissao 3: Acesso ao cadastro de usuarios
        conteudo_cadastro_usuario = ContentType.objects.get(app_label='sistema', model='detalheusuario')
        perm_cadastro_usuario = Permission(name='Can View', codename='perm_cadastro_usuario', content_type=conteudo_cadastro_usuario)
        perm_cadastro_usuario.save()
        mantenedor.permissions.add(perm_cadastro_usuario)
        
        #Permissao 4: Acesso ao cadastro de funcionarios
        conteudo_cadastro_funcionario = ContentType.objects.get(app_label='sistema', model='detalheusuario')
        perm_cadastro_funcionario = Permission(name='Can View', codename='perm_cadastro_funcionario', content_type=conteudo_cadastro_funcionario)
        perm_cadastro_funcionario.save()
        mantenedor.permissions.add(perm_cadastro_funcionario)
        
        #Permissão 5: Acesso ao cadastro de dados financeiros
        conteudo_cadastro_dados_financeiros = ContentType.objects.get(app_label='sistema', model='detalheusuario')
        perm_cadastro_dados_financeiros = Permission(name='Can View', codename='perm_cadastro_dados_financeiros', content_type=conteudo_cadastro_dados_financeiros)
        perm_cadastro_dados_financeiros.save()
        mantenedor.permissions.add(perm_cadastro_dados_financeiros)

        #Permissão 7: Acesso ao cadastro de inventário
        conteudo_cadastro_inventario = ContentType.objects.get(app_label='sistema', model='inventario')
        perm_cadastro_inventario = Permission(name='Can View', codename='perm_cadastro_inventario', content_type=conteudo_cadastro_inventario)
        perm_cadastro_inventario.save()
        administrador.permissions.add(perm_cadastro_inventario)
        mantenedor.permissions.add(perm_cadastro_inventario)
        
        #Permissão 8: Acesso ao cadastro de relatório de aula
        conteudo_cadastro_relatorio_aula = ContentType.objects.get(app_label='sistema', model='relatorioaula')
        perm_cadastro_relatorio_aula = Permission(name='Can View', codename='perm_cadastro_relatorio_aula', content_type=conteudo_cadastro_relatorio_aula)
        perm_cadastro_relatorio_aula.save()
        professor.permissions.add(perm_cadastro_relatorio_aula)
        secretaria.permissions.add(perm_cadastro_relatorio_aula)
        coordenador.permissions.add(perm_cadastro_relatorio_aula)
        administrador.permissions.add(perm_cadastro_relatorio_aula)
        mantenedor.permissions.add(perm_cadastro_relatorio_aula)
        
        #Permissão 9: Acesso ao controle de entradas e saídas
        conteudo_controle_entradas_saidas = ContentType.objects.get(app_label='sistema', model='gastos')
        perm_controle_entradas_saidas = Permission(name='Can View', codename='perm_controle_entradas_saidas', content_type=conteudo_controle_entradas_saidas)
        perm_controle_entradas_saidas.save()
        administrador.permissions.add(perm_controle_entradas_saidas)
        mantenedor.permissions.add(perm_controle_entradas_saidas)
        
        #Permissão 10: Acesso às entradas
        conteudo_controle_entradas = ContentType.objects.get(app_label='sistema', model='gastos')
        perm_controle_entradas = Permission(name='Can View', codename='perm_controle_entradas', content_type=conteudo_controle_entradas)
        perm_controle_entradas.save()
        administrador.permissions.add(perm_controle_entradas)
        mantenedor.permissions.add(perm_controle_entradas)
        coordenador.permissions.add(perm_controle_entradas)

        
        usuario1.groups.add(professor)
        usuario2.groups.add(secretaria)
        usuario3.groups.add(coordenador)
        usuario4.groups.add(administrador)
        usuario5.is_superuser = True
        usuario5.groups.add(mantenedor)


        
            
        
